var name="windows";
let obj1={
    name:"Mitty"
}
let obj2={
    name:"Jim"
}
function fn(addr){
    console.log(this.name+"在"+addr);
}

//这里this指向window
fn("浏览器");//window在浏览器

//改变this指向，apply,call立即调用
fn.apply(obj1,["上海"]);    //Mitty在上海
fn.call(obj1,"上海");     //Mitty在上海

//bind是返回对应的函数
// apply,call再次调用的时候需要重新绑定；bind绑定一次后可以一直调用，属于强绑定
let bindFn=fn.bind(obj1);
bindFn('上海');//Mitty在上海

//bind绑定后的返回函数无法再次更改this指向
bindFn.apply(obj2,['北京']);//Mitty在北京
bindFn.call(obj2,'北京');//Mitty在北京
bindFn.bind(obj2)("北京");//Mitty在北京


fn.apply(obj2,['北京']);
fn.call(obj2,'北京');
fn.bind(obj2)('北京');
